package com.zjl.spring.第10章_提前编译AOT;

/**
 * JIT与AOT的区别
 *      JIT和AOT这个名词是指两种不同的编译方式，这两种编译方式的主要区别在于是否在“运行时”进行编译
 * (1) JIT， just-in-time,动态(即时)编译， 边运行边编译;
 *      在程序运行时，根据算法计算出热点代码,然后进行JIT实时编译,这种方式吞吐量高,有运行时性能加成，
 *      可以跑得更快，并可以做到动态生成代码等，但是相对启动速度较慢，
 *      并需要一定时间和调用频率才能触发JIT的分层机制。
 *      JIT 缺点就是编译需要占用运行时资源，会导致进程卡顿。
 * (2) AOT, Ahead Of Time,指运行前编译，预先编译。
 *      AOT编译能直接将源代码转化为机器码，内存占用低，启动速度快，可以无需runtime运行，
 *      直接将runtime静态链接至最终的程序中，但是无运行时性能加成，
 *      不能根据程序运行情况做进一步的优化，
 *      AOT缺点就是在程序运行前编译会使程序安装的时间增加。
 *
 * 简单来讲:
 * JIT即时编译指的是在程序的运行过程中，将字节码转换为可在硬件上直接运行的机器码，并部署至托管环境中的过程。
 * 而AOT编译指的则是，在程序运行之前，便将字节码转换为机器码的过程。
 *
 * ●AOT的优点
 * 简单来讲，Java 虚拟机加载已经预编译成二进制库，可以直接执行。
 * 不必等待及时编译器的预热，减少Java应用给人带来"第一次运行慢” 的不良体验。
 *
 *      在程序运行前编译，可以避免在运行时的编译性能消耗和内存消耗
 *      可以在程序运行初期就达到最高性能，程序启动速度快
 *      运行产物只有机器码，打包体积小.
 * ●AOT的缺点
 *  由于是静态提前编译,不能根据硬件情况或程序运行情况择优选择机器指令序列，理论峰值性能不如JIT
 *  没有动态能力，同一份产物不能跨平台运行
 *
 *  第一种即时编译(JIT)是默认模式，Java Hotspot虚拟机使用它在运行时将字节码转换为机器码。
 *  后者提前编译(AOT)由新颖的 GraalVM 编译器支持，并允许在构建时将字节码直接静态编译为机器码。
 *
 *  现在正处于云原生，降本增效的时代, Java 相比于Go、Rust 等其他编程语言非常大的弊端就是启动编译和启动进程非常慢，
 *  这对于根据实时计算资源，弹性扩缩容的云原生技术相冲突，
 *  Spring6 借助AOT技术在运行时内存占用低，启动速度快，逐渐的来满足Java在云原生时代的需求，
 *  对于大规模使用Java应用的商业公司可以考虑尽早调研使用JDK17,通过云原生技术为公司实现降本增效。
 *
 */
public class A_AOT概述 {
    public static void main(String[] args) {

    }
}
